Reference
- 문제 출처 - HackerRank
- 파이썬 연습 - Practice - Python
개인적인 생각과 상상으로 작성한 내용들이 포함되어 있습니다
문제를 풀고 Discussion Tab을 참고하며 코드 스타일을 개선하려고 노력하고자 합니다
HackerRank
Subdomain
- ~~Introduction~~
- ~~Basic Data Types~~
- ~~Strings~~
- ~~Sets~~
- ~~Math~~
- ~~Itertools~~
- <strong style="color:blue">Collections</strong>
- Date and Time
- Errors and Exceptions
- Classes
- Built-Ins
- Python Functionals
- Regex and Parsing
- XML
- Closures and Decorators
- Numpy
- Debugging
Collections
기본개념
Collections Module
Collections 모듈은 dict, list, set, tuple과 같은 파이썬의 기본 내장 컨테이너들을 확장한 특수 컨테이너들을 가진다.
namedtuple() | named fields를 가지는 서브클래스 튜플을 만드는 factory 함수 |
deque | 양끝에서 빠르게 append(추가)와 pop(삭제) 할 수 있는 list-like 컨테이너 |
ChainMap | 여러 매핑의 단일 뷰를 만드는 dict-like 클래스 |
Counter | 해시 가능한 객체의 요소 개수를 세는 데 사용하는 dict 서브클래스 |
OrderedDict | 항목이 추가된 순서를 기억하는 dict 서브클래스 |
defaultdict | 결측값에 기본 값을 자동으로 지정해주는 dict 서브클래스 |
UserDict | 더 쉬운 dict 서브 클래싱을 위해 dict 객체를 감싸는 wrapper |
UserList | 더 쉬운 list 서브 클래싱을 위해 list 객체를 감싸는 wrapper |
UserString | 더 쉬운 string 서브 클래싱을 위해 string 객체를 감싸는 wrapper |
namedtuple()
tuple의 immutable한 성질을 띄면서 Dictionary Key로 접근할 수 있는 장점들을 가지고 있다.
|
- tuple, namedtuple, dict 비교
|
tuple: 0.068188 |
deque()
double-ended queue 의 줄임말로, 앞과 뒤에서 즉, 양방향에서 데이터를 처리할 수 있는 queue형 자료구조를 의미한다.
더하기 : 추가(append, appendleft), 확장(extend, extendleft), 삽입(insert)
빼기 : 비우기(clear), 제거(remove), 반환 및 제거(pop)
조작 : 뒤집기(reverse), 회전(rotate), 복사(copy)
확인 : 요소 수(count), 위치(index), 최대크기(maxlen)
|
append -> d: deque(['a', 'b', 'c', 'd']) |
ChainMap()
파이썬 3.3v 부터 기능을 지원한다.
사실 기본 내장함수에서 dict.update()
를 통해 Chain of Dictionaries를 구현할 수 있기에 굳이 사용하지 않는 함수이다.
하지만 ChainMap()
함수를 사용함으로 코드 작성의 편의성과 가독성이 높아지는 장점을 무시 할 수는 없다.
|
0.00088 |
Counter()
빈도수를 확인할 때 많이 사용된다
|
OrderedDict()
딕셔너리 순서를 재배치하는데 사용된다.popitem(last=True)
: last가 참이면 LIFO 순서로, 거짓이면 FIFO 순서로 (key, value) 값을 반환한다move_to_end(key, last=True)
: key를 last가 참이면 오른쪽 끝으로, 거짓이면 왼쪽 끝으로 보낸다
|